var QTYYComponentsTable = function() {
	/**
	 * 初始化基本表格
	 */
	var initBootStrapTable = function(table, ajaxUrl, columns) {
		table.bootstrapTable({
			method : 'get',
			url : ajaxUrl,
			cache : false,
			dataType : "json",
			striped : false, // 使表格带有条纹
			sortable : true,
			pagination : false, // 在表格底部显示分页工具栏
			pageSize : 10,
			pageNumber : 1,
			pageList : [ 10, 15, 20 ],
			idField : "id", // 标识哪个字段为id主键
			showToggle : false, // 名片格式
			cardView : false,// 设置为True时显示名片（card）布局
			singleSelect : false,// 复选框只能选择一条记录
			search : false,// 是否显示右上角的搜索框
			clickToSelect : true,// 点击行即可选中单选/复选框
			sidePagination : "server",// 表格分页的位置
			queryParamsType : "", // 参数格式,发送标准的RESTFul类型的参数请求
			strictSearch : true,
			showColumns : false, // 是否显示所有的列
			showRefresh : false, // 是否显示刷新按钮
			minimumCountColumns : 2, // 最少允许的列数
			responseHandler : function(res) {
				return {
					"rows" : res.obj.records,
					"total" : res.obj.total
				};
			},
			silent : true, // 刷新事件必须设置
			formatNoMatches : function() { // 没有匹配的结果
				return '无符合条件的记录';
			},
			rowStyle : function(row, index) {
				return {
					classes : "cursorHand"
				}
			},
			columns : columns
		});
	}
	
	var initBootStrapTablePage = function(table, ajaxUrl, columns) {
		table.bootstrapTable({
			method : 'get',
			url : ajaxUrl,
			cache : false,
			dataType : "json",
			striped : false, // 使表格带有条纹
			sortable : true,
			pagination : true, // 在表格底部显示分页工具栏
			pageSize : 10,
			pageNumber : 1,
			pageList : [ 10, 15, 20 ],
			idField : "id", // 标识哪个字段为id主键
			showToggle : false, // 名片格式
			cardView : false,// 设置为True时显示名片（card）布局
			singleSelect : false,// 复选框只能选择一条记录
			search : false,// 是否显示右上角的搜索框
			clickToSelect : true,// 点击行即可选中单选/复选框
			sidePagination : "server",// 表格分页的位置
			queryParamsType : "", // 参数格式,发送标准的RESTFul类型的参数请求
			strictSearch : true,
			showColumns : false, // 是否显示所有的列
			showRefresh : false, // 是否显示刷新按钮
			minimumCountColumns : 2, // 最少允许的列数
			responseHandler : function(res) {
				return {
					"rows" : res.obj.records,
					"total" : res.obj.total
				};
			},
			silent : true, // 刷新事件必须设置
			formatNoMatches : function() { // 没有匹配的结果
				return '无符合条件的记录';
			},
			rowStyle : function(row, index) {
				return {
					classes : "cursorHand"
				}
			},
			columns : columns
		});
	}

	/**
	 * 表格搜索
	 */
	var searchTable = function(tableId, searchFormId) {
		var params = $("#" + tableId).bootstrapTable("getOptions");
		params.queryParams = function(params) {
			var search = {};
			$.each($("#" + searchFormId).serializeArray(), function(i, field) {
				if (null != field.value && "" != field.value) {
					params[field.name] = field.value;
				}
			});
			return params;
		}
		$("#" + tableId).bootstrapTable("refresh", params);
	}

	/**
	 * 刷新表格方法
	 * 
	 */
	var refreshTable = function(table) {
		table.bootstrapTable('refresh');
	}
	/**
	 * 获取表格选中行
	 * 
	 */
	var getTableSelections = function(table) {
		return table.bootstrapTable('getSelections');
	}
	/**
	 * form表单ajax提交封装方法
	 */
	var ajaxFormSumbitTable = function(ajaxUrl, formId, pTableId) {
		swal({
			title : "确定提交表单?",
			text : "",
			type : "warning",
			showCancelButton : true,
			confirmButtonClass : "btn-danger",
			confirmButtonText : "确定",
			cancelButtonText : "取消",
			closeOnConfirm : false,
			closeOnCancel : false
		}, function(isConfirm) {
			if (isConfirm) {
				$.ajax({
					type : "POST",
					cache : false,
					url : ajaxUrl,
					data : $("#" + formId).serialize(),
					success : function(responseJson) {
						if (responseJson.success == true) {
							var index = parent.layer.getFrameIndex(window.name);
							parent.layer.close(index);

							var pTable = parent.$("#" + pTableId);
							refreshTable(pTable);// 刷新表格
							QTYYComponents.bootstrapSweetAlert("", responseJson.msg, "success");
						} else {
							QTYYComponents.bootstrapSweetAlert("", responseJson.msg, "error");
						}
					},
					beforeSend : function(XMLHttpRequest) {
						// 请求之前方法增强处理 ,显示遮罩层
						App.blockUI({
							target : '#' + formId,
							animate : true
						});
					},
					complete : function(XMLHttpRequest, textStatus) {
						// 请求结束方法增强处理 ,隐藏遮罩层
						App.unblockUI('#' + formId);
					},
					error : function(XMLHttpRequest, textStatus, errorThrown) {
						QTYYComponents.bootstrapSweetAlert("", "处理失败，请稍候重试", "error");
					}
				});
			} else {
				swal("", "已经取消了当前操作", "error");
			}
		});
	}

	var ajaxDeleteTable = function(ajaxUrl, table) {
		var rows = QTYYComponentsTable.getTableSelections(table);
		if (rows.length == 0) {
			QTYYComponents.bootstrapSweetAlert("", "请选择一条记录", "error");
			return;
		}
		swal({
			title : "确定删除吗?",
			text : "",
			type : "warning",
			showCancelButton : true,
			confirmButtonClass : "btn-danger",
			confirmButtonText : "确定",
			cancelButtonText : "取消",
			closeOnConfirm : false,
			closeOnCancel : false
		}, function(isConfirm) {
			if (isConfirm) {
				var idDataArray = [];
				$.each(rows, function(i, obj) {
					idDataArray.push(obj.id);
				});
				$.ajax({
					type : 'POST',
					url : ajaxUrl,
					contentType : "application/json",
					data : JSON.stringify(idDataArray),
					dataType : "json",
					success : function(responseJson) {
						if (responseJson.success == true) {
							table.bootstrapTable('refresh');
							QTYYComponents.bootstrapSweetAlert("", responseJson.msg, "success");
						} else {
							QTYYComponents.bootstrapSweetAlert("", responseJson.msg, "error");
						}
					},
					error : function(response) {
						QTYYComponents.bootstrapSweetAlert("", "处理失败，请稍候重试", "error");
					}
				});
			} else {
				swal("", "已经取消了当前操作", "error");
			}
		});
	}

	return {
		initBootStrapTable : function(table, ajaxUrl, columns) {
			initBootStrapTable(table, ajaxUrl, columns);
		},
		initBootStrapTablePage : function(table, ajaxUrl, columns) {
			initBootStrapTablePage(table, ajaxUrl, columns);
		},
		searchTable : function(tableId, searchFormId) {
			searchTable(tableId, searchFormId);
		},
		refreshTable : function(table) {
			refreshTable(table);
		},
		getTableSelections : function(table) {
			return getTableSelections(table);
		},
		ajaxFormSumbitTable : function(ajaxUrl, formId, pTableId) {
			ajaxFormSumbitTable(ajaxUrl, formId, pTableId);
		},
		ajaxDeleteTable : function(ajaxUrl, table) {
			ajaxDeleteTable(ajaxUrl, table);
		}
	}
}();